/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package master.client;

import info.client.InfoClient;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
 *
 * @author mark
 */
public class Add_User extends JFrame implements ActionListener{
    //Declaratie van GUI-elementen en andere variabelen
    private JTextField username = new JTextField(10);
    private JTextField password = new JTextField(10);
    private JRadioButton yesButton = new JRadioButton("Ja", false);
    private JRadioButton noButton = new JRadioButton("Nee", true);
    
    private JLabel label_username = new JLabel("Gebruikersnaam");
    private JLabel label_password = new JLabel("Wachtwoord");
    private JButton submit = new JButton("Toevoegen");
    
    private JPanel panel = new JPanel();
    private JPanel panel2 = new JPanel();
    private JPanel panel3 = new JPanel();
    
    ButtonGroup buttongroup = new ButtonGroup();
    
    private Users users;
    
    private String[] emails;
    private Boolean checkEmail = true;
    
    public Add_User(String[] _emails)
    {
        //Toevoegen van 2 radiobuttons aan buttongroup.
        buttongroup.add(yesButton);
        buttongroup.add(noButton);

        //Toevoegen van panels aan de layout van het scherm en elementen aan de panels.
        add(this.panel, BorderLayout.NORTH);
        panel2.setLayout(new GridLayout(2, 1));
        add(this.panel3, BorderLayout.AFTER_LAST_LINE);
        panel.add(label_username);
        panel.add(username);
        panel.add(label_password);
        panel.add(password);
        panel2.add(yesButton);
        panel2.add(noButton);
        panel3.add(submit);
        
        //Voeg de actionlistner toe aan de submit knop
        submit.addActionListener(this);

        //Maak de border voor de buttongroep
        panel2.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Admin?"));

        //Voeg de panels toe aan het hoofdpanel.
        panel.add(panel2);
        panel.add(panel3);
        
        //Declareer loginpanel als contentpane
        setContentPane( panel );
        
        //Geef een aantal eigenschappen op van het scherm
        setResizable(false);
        setVisible(true);
        setSize(250, 200);
        setTitle("Gebruiker toevoegen");
        
        //Sla de meegegeven lijst van emailadressen op
        emails = _emails;
        
    }
    
    //Methode om de geselecteerde Radiobutton op te halen.
    public static JRadioButton getSelection(ButtonGroup group) {
    for (Enumeration e=group.getElements(); e.hasMoreElements(); ) {
        JRadioButton b = (JRadioButton)e.nextElement();
        if (b.getModel() == group.getSelection()) {
            return b;
        }
    }
    return null;
    }
    
    //Methode om te kijken of het emailadres al bestaat in het systeem.
    public Boolean checkEmail(Boolean checkEmail)
    {
        String email = username.getText();
        
        for(String em : emails)
        {
            if(email.equals(em))
            {
                checkEmail = false;
            }
        }
        return checkEmail;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //Als er op de submit knop is gedrukt.
        if(e.getSource() == submit)
        { 
            //Maak de variabele aan waarin staat of het mailadres al in het systeem staat.
            checkEmail = checkEmail(checkEmail);
            
            //Maak de variabelen aan waarin het emailadres, password en permissions worden opgeslagen
            String email = username.getText();
            String ww = password.getText();
            Boolean permissions_bool = null;
            
            //Kijk of de gebruiker als admin meot worden toegevoegd
            JRadioButton b = getSelection(buttongroup);
            String permissions = b.getText().toString();
            
            //Maak een regex aan om te kijken of het emailadres geldig is, en vergelijk het ingevulde adres ook met de regex.
            Pattern p = Pattern.compile(".+@.+\\.[a-z]+");
            Matcher m = p.matcher(email);
            boolean matchFound = m.matches();
            
            //Als de gebruiker niet als admin moet worden opgeslagen
            if(permissions.equals("Nee"))
            {
                permissions_bool = false;
            }
            //Als de gebruiker wel als admin moet worden opgeslagen.
            else
            {
                permissions_bool = true;
            }
            //Als het emailadres of password (of beiden) niet is (zijn) ingevuld.
            if (email.equals("") || ww.equals(""))
            {
                //Laat een popupje zien waarop staat dat je beide velden in moet vullen.
                JOptionPane.showMessageDialog(null,"Vul beide velden in","Mislukt",JOptionPane.WARNING_MESSAGE);
            }
            //Als het emailadres al bestaat in het systeem.
            if (checkEmail == false)
            {
                //Laat een popupje zien waarop staat dat het emailadres al in gebruik is.
                JOptionPane.showMessageDialog(null,"Dit emailadres is al in gebruik","Mislukt",JOptionPane.WARNING_MESSAGE);
                //Zet de variabele om te checken of het emailadres al bestaat op true
                checkEmail = true;
            }
            //Als het emailadres niet overeenkomt met het regexpatroon.
            if(matchFound == false)
            {
                //Laat een popupje zien waarop staat dat je geen geldig emailadres in hebt gevuld
                JOptionPane.showMessageDialog(null,"Dit is geen geldig emailadres /n Voorbeeld: yourikamperman@hotmail.com","Mislukt",JOptionPane.WARNING_MESSAGE);
            }
            //Als alles hiervoor niet van toepassing is.
            else
            {
                //Bouw de query op
                String query = "INSERT INTO inloggegevens (email, wachtwoord, admin) values ('" + email + "', '" + ww + "', '" + permissions_bool + "')";
                //Stuur de query over de socketconnection
                InfoClient.socketconnection.send(query);
                //Laat een dialoogje zien dat het submit is gelukt
                JOptionPane.showMessageDialog(null, email + " is toegevoegd","Gebruiker toegevoegd",JOptionPane.INFORMATION_MESSAGE);
                //Sluit dit scherm af.
                this.setVisible(false);
            }

        }
    
    }
}
